package com.jqq.map_;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author 姬倩倩
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class MapSource {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1","李四");//k-v
        map.put("no2","张三");//k-v
        //1.k-v最后是HashMap$Node node = newNode(hash, key, vaule, null)
        //2.k-v为了方便程序员的遍历，还会创建EntrySet集合，该集合存放的类型是Entry
        // 而一个Entry对象就有k,v, EntrySet<Entry<K,V>>
        // transient Set<Map.Entry<K,V>> entrySet;
        //3.entrySet中，定义的类型是Map.Entry，但是实际上存放的还是HashMap$Node
        // 因为HashMap$Node implements Map.Entry
        //当一个类实现了一个接口，这个类的对象实例就可以赋给这个接口
        //当把HashMap$Node对象存放到entrySet，就可以用集合的迭代器进行遍历
        Set set = map.entrySet();
        System.out.println(set.getClass());//HashMap$EntrySet
        for (Object obj : set) {
//            System.out.println(obj.getClass());//HashMap$Node
            //为了从HashMap$Node中取出k-v
            //1.先做一个向下转型
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey() + "-" + entry.getValue());

            Set set1 = map.keySet();
            System.out.println(set1.getClass());//HashMap$KeySet
            Collection values = map.values();
            System.out.println(values.getClass());//HashMap$Values

        }

    }

}
